package cn.biplam.front.template.base;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.KvMap;
import cn.biplam.common.wrapper.sqlresult.SqlResult;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.base.Radio.Layout_Type;

/**
 * 单选框组
 * @author 	WangSong
 * @create 	2009-5-6 上午10:12:27
 * @version 1.0
 */
public class RadioGroup implements Template {
	
	private String ID;
	private String sHomeUrl;
	private HtmlWindow radioGroup;
	private KvMap<Integer,String[]> radios;
	private Layout_Type type;
	private int iCount=0;
	private int width;
	private boolean readOnly;
	
	/**
	 * 构造函数 默认横排
	 * @param ID 单选框的id
	 * @param sHomeUrl 系统路径
	 */
	public RadioGroup(String ID,String sHomeUrl){
		this(ID,sHomeUrl,Layout_Type.Horizontal);
	}
	
	/**
	 * 构造函数 
	 * @param ID 单选框的id
	 * @param sHomeUrl 系统路径
	 * @param 排版类型
	 */
	public RadioGroup(String ID,String sHomeUrl,Layout_Type type){
		this(ID,sHomeUrl,type,false);
	}
	
	/**
	 * 构造函数 
	 * @param ID 单选框的id
	 * @param sHomeUrl 系统路径
	 * @param checked  是否被选中
	 * @param type 排版类型
	 * @param readOnly 是否只读
	 * @param 排版类型
	 */
	public RadioGroup(String ID,String sHomeUrl,Layout_Type type,boolean readOnly){
		this.ID = ID;
		this.sHomeUrl = sHomeUrl;
		this.radios = new KvMap<Integer,String[]>();
		this.radioGroup = new HtmlDiv(ID);
		this.type = type;
		this.readOnly = readOnly;
	}
	
	/**
	 * 设置单选框的内容
	 * @param optionId  单选框选项对应的对象id
	 * @param optionText 单选框选项对应的对象说明
	 * @throws ErrorMessage
	 */
	public void set(String optionId,String optionText) throws ErrorMessage{
		this.radios.put(this.iCount,new String[]{optionId,optionText,"false"});
		this.iCount++;
	}
	
	/**
	 * 设置单选框的内容
	 * @param optionId  单选框选项对应的对象id
	 * @param optionText 单选框选项对应的对象说明
	 * @param isDefault 是否是默认值
	 * @throws ErrorMessage
	 */
	public void set(String optionId,String optionText,boolean isDefault) throws ErrorMessage{
		this.radios.put(this.iCount,new String[]{optionId,optionText,String.valueOf(isDefault)});
		this.iCount++;
	}
	
	/**
	 * * 设置单选框的内容
	 * @param sr SqlResult 数据源
	 * @param optionIdName SqlResult中选项id的列名
	 * @param optionTextName SqlResult中选项说明的列名
	 * @param defaultValue  默认值
	 * @throws ErrorMessage  
	 */
	public void set(SqlResult sr,String optionIdName,String optionTextName,String defaultValue) throws ErrorMessage{
		if(sr!=null){
			String isdefault = null;
			for(int i=0;i<sr.size();i++){
				isdefault = "false";
				if(defaultValue!=null && defaultValue.equals(sr.get(i, optionIdName))){
					isdefault = "true";
				}
				this.radios.put(this.iCount, 
						         new String[]{sr.get(i, optionIdName),
						                      sr.get(i, optionTextName),
						                      isdefault});
				this.iCount++;
			}
		}
	}

	/**
	 * 取单选框组
	 */
	public HtmlWindow get() throws ErrorMessage {
		HtmlWindow radioTemp = null;
		for(int i=0;i<this.radios.size();i++){
			if(this.radios.getByKey(i).length>1){
				radioTemp = new Radio(ID,
											this.radios.getByKey(i)[0],
											this.sHomeUrl,
											this.radios.getByKey(i)[1],
											this.type,
											Boolean.parseBoolean(this.radios.getByKey(i)[2]),
											this.readOnly).get();
				this.radioGroup.put(radioTemp);
			}
			this.width = this.width + radioTemp.getLength();
		}
		this.radioGroup.setLength(this.width);
		return this.radioGroup;
	}
}
